home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / hash / RCS / HashChainSearch.c,v < prev   
Text File  |  1989-12-11  |  4KB  |  192 lines

  1. head     1.5;
  2. branch   ;
  3. access   ;
  4. symbols  ;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.5
  10. date     89.12.11.11.08.56;  author mgbaker;  state Exp;
  11. branches ;
  12. next     1.4;
  13.  
  14. 1.4
  15. date     88.07.29.18.30.14;  author ouster;  state Exp;
  16. branches ;
  17. next     1.3;
  18.  
  19. 1.3
  20. date     88.07.28.17.57.18;  author ouster;  state Exp;
  21. branches ;
  22. next     1.2;
  23.  
  24. 1.2
  25. date     88.07.25.13.29.11;  author ouster;  state Exp;
  26. branches ;
  27. next     1.1;
  28.  
  29. 1.1
  30. date     88.06.20.09.30.18;  author ouster;  state Exp;
  31. branches ;
  32. next     ;
  33.  
  34.  
  35. desc
  36. @@
  37.  
  38.  
  39. 1.5
  40. log
  41. @Fixed bug for multiple word keys where it would return the opposite
  42. of whether it matched on it or not.
  43. @
  44. text
  45. @/* 
  46.  * HashChainSearch.c --
  47.  *
  48.  *    Source code for HashChainSearch, a utility procedure used by
  49.  *    the hash table library.
  50.  *
  51.  * Copyright 1988 Regents of the University of California
  52.  * Permission to use, copy, modify, and distribute this
  53.  * software and its documentation for any purpose and without
  54.  * fee is hereby granted, provided that the above copyright
  55.  * notice appear in all copies.  The University of California
  56.  * makes no representations about the suitability of this
  57.  * software for any purpose.  It is provided "as is" without
  58.  * express or implied warranty.
  59.  */
  60.  
  61. #ifndef lint
  62. static char rcsid[] = "$Header: /sprite/src/lib/c/hash/RCS/HashChainSearch.c,v 1.4 88/07/29 18:30:14 ouster Exp Locker: mgbaker $ SPRITE (Berkeley)";
  63. #endif not lint
  64.  
  65. #include "hash.h"
  66. #include "list.h"
  67.  
  68. /*
  69.  *---------------------------------------------------------
  70.  *
  71.  * HashChainSearch --
  72.  *
  73.  *     Search the hash table for the entry in the hash chain.
  74.  *
  75.  * Results:
  76.  *    Pointer to entry in hash chain, NULL if none found.
  77.  *
  78.  * Side Effects:
  79.  *    None.
  80.  *
  81.  *---------------------------------------------------------
  82.  */
  83.  
  84. Hash_Entry *
  85. HashChainSearch(tablePtr, key, hashList)
  86.     Hash_Table         *tablePtr;    /* Hash table to search. */
  87.     register Address    key;    /* A hash key. */
  88.     register List_Links *hashList;
  89. {
  90.     register Hash_Entry *hashEntryPtr;
  91.     register int     *hashKeyPtr;
  92.     int         *keyPtr;
  93.     register int    numKeys;
  94.  
  95.     numKeys = tablePtr->keyType;
  96.     LIST_FORALL(hashList, (List_Links *) hashEntryPtr) {
  97.     switch (numKeys) {
  98.         case 0:
  99.         if (strcmp(hashEntryPtr->key.name, key) == 0) {
  100.             return(hashEntryPtr);
  101.         }
  102.         break;
  103.         case 1:
  104.         if (hashEntryPtr->key.ptr == key) {
  105.             return(hashEntryPtr);
  106.         }
  107.         break;
  108.         case 2:
  109.         hashKeyPtr = hashEntryPtr->key.words;
  110.         keyPtr = (int *) key;
  111.         if (*hashKeyPtr++ == *keyPtr++ && *hashKeyPtr == *keyPtr) {
  112.             return(hashEntryPtr);
  113.         }
  114.         break;
  115.         default:
  116.         if (!bcmp((char *) hashEntryPtr->key.words,
  117.                 (char *) key, numKeys * sizeof(int))) {
  118.             return(hashEntryPtr);
  119.         }
  120.         break;
  121.     }
  122.     }
  123.  
  124.     /* 
  125.      * The desired entry isn't there 
  126.      */
  127.  
  128.     return ((Hash_Entry *) NULL);
  129. }
  130. @
  131.  
  132.  
  133. 1.4
  134. log
  135. @Bug in lint cleanupl.
  136. @
  137. text
  138. @d18 1
  139. a18 1
  140. static char rcsid[] = "$Header: HashChainSearch.c,v 1.3 88/07/28 17:57:18 ouster Exp $ SPRITE (Berkeley)";
  141. d72 1
  142. a72 1
  143.         if (bcmp((char *) hashEntryPtr->key.words,
  144. @
  145.  
  146.  
  147. 1.3
  148. log
  149. @Lint.
  150. @
  151. text
  152. @d18 1
  153. a18 1
  154. static char rcsid[] = "$Header: HashChainSearch.c,v 1.2 88/07/25 13:29:11 ouster Exp $ SPRITE (Berkeley)";
  155. d73 1
  156. a73 1
  157.                 (char *) key), numKeys * sizeof(int)) {
  158. @
  159.  
  160.  
  161. 1.2
  162. log
  163. @Forgot to change procedure's name.
  164. @
  165. text
  166. @d18 1
  167. a18 1
  168. static char rcsid[] = "$Header: HashChainSearch.c,v 1.1 88/06/20 09:30:18 ouster Exp $ SPRITE (Berkeley)";
  169. d72 2
  170. a73 2
  171.         if (bcmp((Address) hashEntryPtr->key.words,
  172.                 (Address) key), numKeys * sizeof(int)) {
  173. @
  174.  
  175.  
  176. 1.1
  177. log
  178. @Initial revision
  179. @
  180. text
  181. @d18 1
  182. a18 1
  183. static char rcsid[] = "$Header: proto.c,v 1.2 88/03/11 08:39:08 ouster Exp $ SPRITE (Berkeley)";
  184. d27 1
  185. a27 1
  186.  * ChainSearch --
  187. d40 2
  188. a41 2
  189. static Hash_Entry *
  190. ChainSearch(tablePtr, key, hashList)
  191. @
  192.